﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Core.Objects;
using System.Dynamic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using TS2015.Models;
using System.Data.Entity;

namespace TS2015.Areas.Admin.Controllers
{
    public class ThongKeController : Controller
    {
        TS2015Context db = new TS2015Context();

        public ActionResult HoSoDangKy()
        {
            Session["current_url"] = Request.Url.AbsoluteUri;

            if (!CheckRole.IsRole("tk_hsdk", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (Request.IsAjaxRequest())
                return PartialView();
            else
                return View();
        }

        public ActionResult DangKyTheoNganh()
        {
            Session["current_url"] = Request.Url.AbsoluteUri;
            if (!CheckRole.IsRole("tk_dktn", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            ViewBag.KhoiThi = new SelectList(db.TbKhoiThis.ToList(), "MaKhoiThi", "TenKhoiThi");
            ViewBag.BacDaoTao = new SelectList(db.TbBacDaoTaos.Include(e => e.TbHeDaoTao).Select(e => new BacDaoTao { MaBacDT = e.MaBacDT, TenBacDT = e.TenBacDT + " - " + e.TbHeDaoTao.TenHeDaoTao }).OrderBy(e => e.TenBacDT), "MaBacDT", "TenBacDT");

            if (Request.IsAjaxRequest())
                return PartialView();
            else
                return View();
        }
        public ActionResult DangKyTheoChuyenNganh()
        {
            Session["current_url"] = Request.Url.AbsoluteUri;
            if (!CheckRole.IsRole("tk_dktcn", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            ViewBag.BacDaoTao = new SelectList(db.TbBacDaoTaos.Include(e => e.TbHeDaoTao).Select(e => new BacDaoTao { MaBacDT = e.MaBacDT, TenBacDT = e.TenBacDT + " - " + e.TbHeDaoTao.TenHeDaoTao }).OrderBy(e=>e.TenBacDT), "MaBacDT", "TenBacDT");
            ViewBag.KhoiThi = new SelectList(db.TbKhoiThis.ToList(), "MaKhoiThi", "TenKhoiThi");
            ViewBag.Nganh = new SelectList(db.TbNganhs.ToList(), "IDNganh", "TenNganh");

            if (Request.IsAjaxRequest())
                return PartialView();
            else
                return View();
        }
        public ActionResult DangKyTheoBDT()
        {
            Session["current_url"] = Request.Url.AbsoluteUri;
            if (!CheckRole.IsRole("tk_dktbdt", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (Request.IsAjaxRequest())
                return PartialView();
            else
                return View();
        }
        public ActionResult DangKyTheoKhoiThi()
        {
            Session["current_url"] = Request.Url.AbsoluteUri;
            if (!CheckRole.IsRole("tk_dktkt", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (Request.IsAjaxRequest())
                return PartialView();
            else
                return View();
        }

        public ActionResult DangKyThem()
        {
            Session["current_url"] = Request.Url.AbsoluteUri;
            if (!CheckRole.IsRole("tk_dkt", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (Request.IsAjaxRequest())
                return PartialView();
            else
                return View();
        }

        public ActionResult HinhThucTuyenSinh()
        {
            Session["current_url"] = Request.Url.AbsoluteUri;
            if (!CheckRole.IsRole("tk_htts", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (Request.IsAjaxRequest())
                return PartialView();
            else
                return View();
        }

        [HttpPost]
        [ActionName("HoSoDangKy")]
        public ActionResult POST_HoSoDangKy(string TuNgay, string DenNgay, string NhomTheo, string TrangThaiKichHoat)
        {
            if (!CheckRole.IsRole("tk_hsdk", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (ModelState.IsValid)
            {
                ViewBag.TuNgay = TuNgay;
                ViewBag.DenNgay = DenNgay;
                DateTime _TuNgay = DateTime.ParseExact(TuNgay, "dd/MM/yyyy", null);
                DateTime _DenNgay = DateTime.ParseExact(DenNgay, "dd/MM/yyyy", null);
                ViewBag.NhomTheo = NhomTheo;
                ViewBag.HinhThucDK = from enumValue in Enum.GetValues(typeof(HinhThucDK)).Cast<HinhThucDK>()
                                     select new SelectListItem
                                     {
                                         Text = ((DisplayAttribute)(typeof(HinhThucDK).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false).First())).Name,
                                         Value = ((int)enumValue).ToString(),
                                     };

                IEnumerable<ResultTK> result = (from p in db.TbThiSinhs
                                                join q in db.TbChuyenNganhs on p.MaChuyenNganh equals q.MaChuyenNganh
                                                join a in db.TbThiSinh_BacDaoTaos on p.MaTS equals a.MaTS
                                                join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
                                                //join h in db.TbHeDaoTaos on b.MaHeDaoTao equals h.MaHeDaoTao
                                                join k in db.TbNganhs on q.IDNganh equals k.IDNganh
                                                join l in db.TbKhoiThis on k.MaKhoiThi equals l.MaKhoiThi
                                                where a.DKThem == false
                                                orderby p.NgayDangKi
                                                select new ResultTK
                                                {
                                                    MaTS = p.MaTS,
                                                    FullName = p.HoDem + " " + p.Ten,
                                                    SBD = p.SBD,
                                                    NgaySinh = p.NgaySinh,
                                                    MaChuyenNganh = p.MaChuyenNganh,
                                                    //MaHeDaoTao = h.MaHeDaoTao,
                                                    MaKhoiThi = l.MaKhoiThi,
                                                    TenKhoiThi = l.TenKhoiThi,
                                                    MaNganh = k.MaNganh,
                                                    TenChuyenNganh = q.TenChuyenNganh,
                                                    TenNganh = k.TenNganh,
                                                    //TenHeDaoTao = h.TenHeDaoTao,
                                                    NgayDangKy = p.NgayDangKi,
                                                    TrangThaiDongTien = p.TrangThaiDongTien,
                                                    MaBacDaoTao = b.MaBacDT,
                                                    TenBacDaoTao = b.TenBacDT + " - " + b.TbHeDaoTao.TenHeDaoTao,
                                                    HinhThucDK = p.HinhThucDK
                                                }).AsEnumerable().Where(p => p.NgayDangKy.Date >= _TuNgay.Date && p.NgayDangKy.Date <= _DenNgay.Date);

                if (TrangThaiKichHoat == "2")
                    #region Thống kê đã đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == true);
                    #endregion

                else if (TrangThaiKichHoat == "3")
                    #region Thống kê chưa đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == false);
                    #endregion

                return PartialView("_ThongKeHoSo", result.ToList());
            }
            else
                ModelState.AddModelError("Error", "Có lỗi.");

            return PartialView();
        }

        [HttpPost]
        [ActionName("DangKyTheoNganh")]
        public ActionResult POST_DangKyTheoNganh(string TuNgay, string DenNgay, string KhoiThi, string BacDaoTao, string TrangThaiKichHoat)
        {
            if (!CheckRole.IsRole("tk_dktn", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (ModelState.IsValid)
            {
                ViewBag.TuNgay = TuNgay;
                ViewBag.DenNgay = DenNgay;
                DateTime _TuNgay = DateTime.ParseExact(TuNgay, "dd/MM/yyyy", null);
                DateTime _DenNgay = DateTime.ParseExact(DenNgay, "dd/MM/yyyy", null);
                ViewBag.Khoi = KhoiThi;
                ViewBag.BacDaoTao = db.TbBacDaoTaos.Where(e => e.MaBacDT.ToString() == BacDaoTao).First().TenBacDT;
                ViewBag.HinhThucDK = from enumValue in Enum.GetValues(typeof(HinhThucDK)).Cast<HinhThucDK>()
                                     select new SelectListItem
                                     {
                                         Text = ((DisplayAttribute)(typeof(HinhThucDK).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false).First())).Name,
                                         Value = ((int)enumValue).ToString(),
                                     };

                var result = (from p in db.TbThiSinhs
                              join q in db.TbChuyenNganhs on p.MaChuyenNganh equals q.MaChuyenNganh
                              join a in db.TbThiSinh_BacDaoTaos on p.MaTS equals a.MaTS
                              join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
                              //join h in db.TbHeDaoTaos on b.MaHeDaoTao equals h.MaHeDaoTao
                              join k in db.TbNganhs on q.IDNganh equals k.IDNganh
                              join l in db.TbKhoiThis on k.MaKhoiThi equals l.MaKhoiThi
                              where k.MaKhoiThi == KhoiThi && b.MaBacDT.ToString() == BacDaoTao && a.DKThem == false
                              select new ResultTK
                              {
                                  MaTS = p.MaTS,
                                  FullName = p.HoDem + " " + p.Ten,
                                  SBD = p.SBD,
                                  NgaySinh = p.NgaySinh,
                                  MaChuyenNganh = p.MaChuyenNganh,
                                  //MaHeDaoTao = h.MaHeDaoTao,
                                  MaKhoiThi = l.MaKhoiThi,
                                  TenKhoiThi = l.TenKhoiThi,
                                  MaNganh = k.MaNganh,
                                  TenChuyenNganh = q.TenChuyenNganh,
                                  TenNganh = k.TenNganh,
                                  //TenHeDaoTao = h.TenHeDaoTao,
                                  NgayDangKy = p.NgayDangKi,
                                  TrangThaiDongTien = p.TrangThaiDongTien,
                                  MaBacDaoTao = b.MaBacDT,
                                  TenBacDaoTao = b.TenBacDT + " - " + b.TbHeDaoTao.TenHeDaoTao,
                                  HinhThucDK = p.HinhThucDK
                              }
                              ).AsEnumerable().Where(p => p.NgayDangKy.Date >= _TuNgay.Date && p.NgayDangKy.Date <= _DenNgay.Date);

                if (TrangThaiKichHoat == "2")
                    #region Thống kê đã đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == true);
                    #endregion

                else if (TrangThaiKichHoat == "3")
                    #region Thống kê chưa đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == false);
                    #endregion

                return PartialView("_DangKyTheoNganh", result.ToList());
            }
            else
                ModelState.AddModelError("Error", "Có lỗi.");

            return PartialView();
        }

        [HttpPost]
        [ActionName("DangKyTheoChuyenNganh")]
        public ActionResult POST_DangKyTheoChuyenNganh(string TuNgay, string DenNgay, string BacDaoTao, string KhoiThi, string Nganh, string TrangThaiKichHoat)
        {
            if (!CheckRole.IsRole("tk_dktcn", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (ModelState.IsValid)
            {
                ViewBag.TuNgay = TuNgay;
                ViewBag.DenNgay = DenNgay;
                DateTime _TuNgay = DateTime.ParseExact(TuNgay, "dd/MM/yyyy", null);
                DateTime _DenNgay = DateTime.ParseExact(DenNgay, "dd/MM/yyyy", null);
                ViewBag.Khoi = KhoiThi;
                ViewBag.TenNganh = db.TbNganhs.Where(e => e.IDNganh.ToString() == Nganh).First().TenNganh;
                //ViewBag.HeDaoTao = db.TbHeDaoTaos.Where(e => e.MaHeDaoTao.ToString() == HeDaoTao).First().TenHeDaoTao;
                ViewBag.BacDaoTao = db.TbBacDaoTaos.Where(e => e.MaBacDT.ToString() == BacDaoTao).First().TenBacDT;
                ViewBag.HinhThucDK = from enumValue in Enum.GetValues(typeof(HinhThucDK)).Cast<HinhThucDK>()
                                     select new SelectListItem
                                     {
                                         Text = ((DisplayAttribute)(typeof(HinhThucDK).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false).First())).Name,
                                         Value = ((int)enumValue).ToString(),
                                     };

                var result = (from p in db.TbThiSinhs
                              join q in db.TbChuyenNganhs on p.MaChuyenNganh equals q.MaChuyenNganh
                              join a in db.TbThiSinh_BacDaoTaos on p.MaTS equals a.MaTS
                              join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
                              //join c in db.TbHeDaoTaos on b.MaHeDaoTao equals c.MaHeDaoTao
                              join k in db.TbNganhs on q.IDNganh equals k.IDNganh
                              join h in db.TbChuyenNganhs on p.MaChuyenNganh equals h.MaChuyenNganh
                              join l in db.TbKhoiThis on k.MaKhoiThi equals l.MaKhoiThi
                              where k.MaKhoiThi == KhoiThi && b.MaBacDT.ToString() == BacDaoTao && k.IDNganh.ToString() == Nganh && a.DKThem == false
                              select new ResultTK
                              {
                                  MaTS = p.MaTS,
                                  FullName = p.HoDem + " " + p.Ten,
                                  SBD = p.SBD,
                                  NgaySinh = p.NgaySinh,
                                  MaChuyenNganh = p.MaChuyenNganh,
                                  //MaHeDaoTao = c.MaHeDaoTao,
                                  MaKhoiThi = l.MaKhoiThi,
                                  TenKhoiThi = l.TenKhoiThi,
                                  MaNganh = k.MaNganh,
                                  TenChuyenNganh = q.TenChuyenNganh,
                                  TenNganh = k.TenNganh,
                                  //TenHeDaoTao = c.TenHeDaoTao,
                                  NgayDangKy = p.NgayDangKi,
                                  TrangThaiDongTien = p.TrangThaiDongTien,
                                  MaBacDaoTao = b.MaBacDT,
                                  TenBacDaoTao = b.TenBacDT + " - " + b.TbHeDaoTao.TenHeDaoTao,
                                  HinhThucDK = p.HinhThucDK
                              }
                              ).AsEnumerable().Where(p => p.NgayDangKy.Date >= _TuNgay.Date && p.NgayDangKy.Date <= _DenNgay.Date);

                if (TrangThaiKichHoat == "2")
                    #region Thống kê đã đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == true);
                    #endregion

                else if (TrangThaiKichHoat == "3")
                    #region Thống kê chưa đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == false);
                    #endregion

                return PartialView("_DangKyTheoChuyenNganh", result.ToList());
            }
            else
                ModelState.AddModelError("Error", "Có lỗi.");

            return PartialView();
        }

        [HttpPost]
        [ActionName("DangKyTheoBDT")]
        public ActionResult POST_DangKyTheoBDT(string TuNgay, string DenNgay, string TrangThaiKichHoat)
        {
            if (!CheckRole.IsRole("tk_dktbdt", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (ModelState.IsValid)
            {
                ViewBag.TuNgay = TuNgay;
                ViewBag.DenNgay = DenNgay;
                DateTime _TuNgay = DateTime.ParseExact(TuNgay, "dd/MM/yyyy", null);
                DateTime _DenNgay = DateTime.ParseExact(DenNgay, "dd/MM/yyyy", null);                
                // chuyển từ enum sang selectlist
                ViewBag.HinhThucDK = from enumValue in Enum.GetValues(typeof(HinhThucDK)).Cast<HinhThucDK>()
                            select new SelectListItem
                            {
                                Text = ((DisplayAttribute)(typeof(HinhThucDK).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false).First())).Name,
                                Value = ((int)enumValue).ToString(),                       
                            };
                var result = (from p in db.TbThiSinhs
                              join q in db.TbChuyenNganhs on p.MaChuyenNganh equals q.MaChuyenNganh
                              join a in db.TbThiSinh_BacDaoTaos on p.MaTS equals a.MaTS
                              join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
                              //join h in db.TbHeDaoTaos on b.MaHeDaoTao equals h.MaHeDaoTao
                              join k in db.TbNganhs on q.IDNganh equals k.IDNganh
                              join l in db.TbKhoiThis on k.MaKhoiThi equals l.MaKhoiThi
                              where a.DKThem == false
                              select new ResultTK
                              {
                                  MaTS = p.MaTS,
                                  FullName = p.HoDem + " " + p.Ten,
                                  SBD = p.SBD,
                                  NgaySinh = p.NgaySinh,
                                  MaChuyenNganh = p.MaChuyenNganh,
                                  //MaHeDaoTao = h.MaHeDaoTao,
                                  MaKhoiThi = l.MaKhoiThi,
                                  TenKhoiThi = l.TenKhoiThi,
                                  MaNganh = k.MaNganh,
                                  TenChuyenNganh = q.TenChuyenNganh,
                                  TenNganh = k.TenNganh,
                                  //TenHeDaoTao = h.TenHeDaoTao,
                                  NgayDangKy = p.NgayDangKi,
                                  TrangThaiDongTien = p.TrangThaiDongTien,
                                  MaBacDaoTao = b.MaBacDT,
                                  TenBacDaoTao = b.TenBacDT + " - " + b.TbHeDaoTao.TenHeDaoTao,
                                  HinhThucDK = p.HinhThucDK
                              }
                             ).AsEnumerable().Where(p => p.NgayDangKy.Date >= _TuNgay.Date && p.NgayDangKy.Date <= _DenNgay.Date);

                if (TrangThaiKichHoat == "2")
                    #region Thống kê đã đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == true);
                    #endregion

                else if (TrangThaiKichHoat == "3")
                    #region Thống kê chưa đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == false);
                    #endregion

                return PartialView("_DangKyTheoBDT", result.ToList());
            }
            else
                ModelState.AddModelError("Error", "Có lỗi.");

            return PartialView();
        }
        [HttpPost]
        public ActionResult DangKyTheoKhoiThi(string TuNgay, string DenNgay, string TrangThaiKichHoat)
        {
            if (!CheckRole.IsRole("tk_dktkt", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (ModelState.IsValid)
            {
                ViewBag.TuNgay = TuNgay;
                ViewBag.DenNgay = DenNgay;
                DateTime _TuNgay = DateTime.ParseExact(TuNgay, "dd/MM/yyyy", null);
                DateTime _DenNgay = DateTime.ParseExact(DenNgay, "dd/MM/yyyy", null);
                ViewBag.HinhThucDK = from enumValue in Enum.GetValues(typeof(HinhThucDK)).Cast<HinhThucDK>()
                                     select new SelectListItem
                                     {
                                         Text = ((DisplayAttribute)(typeof(HinhThucDK).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false).First())).Name,
                                         Value = ((int)enumValue).ToString(),
                                     };

                var result = (from p in db.TbThiSinhs
                              join q in db.TbChuyenNganhs on p.MaChuyenNganh equals q.MaChuyenNganh
                              join a in db.TbThiSinh_BacDaoTaos on p.MaTS equals a.MaTS
                              join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
                              //join h in db.TbHeDaoTaos on b.MaHeDaoTao equals h.MaHeDaoTao
                              join k in db.TbNganhs on q.IDNganh equals k.IDNganh
                              join l in db.TbKhoiThis on k.MaKhoiThi equals l.MaKhoiThi
                              where a.DKThem == false
                              select new ResultTK
                              {
                                  MaTS = p.MaTS,
                                  FullName = p.HoDem + " " + p.Ten,
                                  SBD = p.SBD,
                                  NgaySinh = p.NgaySinh,
                                  MaChuyenNganh = p.MaChuyenNganh,
                                  //MaHeDaoTao = h.MaHeDaoTao,
                                  MaKhoiThi = l.MaKhoiThi,
                                  TenKhoiThi = l.TenKhoiThi,
                                  MaNganh = k.MaNganh,
                                  TenChuyenNganh = q.TenChuyenNganh,
                                  TenNganh = k.TenNganh,
                                  //TenHeDaoTao = h.TenHeDaoTao,
                                  NgayDangKy = p.NgayDangKi,
                                  TrangThaiDongTien = p.TrangThaiDongTien,
                                  MaBacDaoTao = b.MaBacDT,
                                  TenBacDaoTao = b.TenBacDT + " - " + b.TbHeDaoTao.TenHeDaoTao,
                                  HinhThucDK = p.HinhThucDK
                              }
                             ).AsEnumerable().Where(p => p.NgayDangKy.Date >= _TuNgay.Date && p.NgayDangKy.Date <= _DenNgay.Date);

                if (TrangThaiKichHoat == "2")
                    #region Thống kê đã đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == true);
                    #endregion

                else if (TrangThaiKichHoat == "3")
                    #region Thống kê chưa đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == false);
                    #endregion

                return PartialView("_DangKyTheoKhoi", result.ToList());
            }
            else
                ModelState.AddModelError("Error", "Có lỗi.");

            return PartialView();
        }

        [HttpPost]
        public ActionResult DangKyThem(string TuNgay, string DenNgay, string TrangThaiKichHoat)
        {
            if (!CheckRole.IsRole("tk_dkt", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (ModelState.IsValid)
            {
                ViewBag.TuNgay = TuNgay;
                ViewBag.DenNgay = DenNgay;
                DateTime _TuNgay = DateTime.ParseExact(TuNgay, "dd/MM/yyyy", null);
                DateTime _DenNgay = DateTime.ParseExact(DenNgay, "dd/MM/yyyy", null);
                ViewBag.HinhThucDK = from enumValue in Enum.GetValues(typeof(HinhThucDK)).Cast<HinhThucDK>()
                                     select new SelectListItem
                                     {
                                         Text = ((DisplayAttribute)(typeof(HinhThucDK).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false).First())).Name,
                                         Value = ((int)enumValue).ToString(),
                                     };

                var result = (from p in db.TbThiSinhs
                              join q in db.TbChuyenNganhs on p.MaChuyenNganh equals q.MaChuyenNganh
                              join a in db.TbThiSinh_BacDaoTaos on p.MaTS equals a.MaTS
                              join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
                              //join h in db.TbHeDaoTaos on b.MaHeDaoTao equals h.MaHeDaoTao
                              join k in db.TbNganhs on q.IDNganh equals k.IDNganh
                              join l in db.TbKhoiThis on k.MaKhoiThi equals l.MaKhoiThi
                              where a.DKThem == true
                              select new ResultTK
                              {
                                  MaTS = p.MaTS,
                                  FullName = p.HoDem + " " + p.Ten,
                                  SBD = p.SBD,
                                  NgaySinh = p.NgaySinh,
                                  MaChuyenNganh = p.MaChuyenNganh,
                                  //MaHeDaoTao = h.MaHeDaoTao,
                                  MaKhoiThi = l.MaKhoiThi,
                                  TenKhoiThi = l.TenKhoiThi,
                                  MaNganh = k.MaNganh,
                                  TenChuyenNganh = q.TenChuyenNganh,
                                  TenNganh = k.TenNganh,
                                  //TenHeDaoTao = h.TenHeDaoTao,
                                  NgayDangKy = p.NgayDangKi,
                                  TrangThaiDongTien = p.TrangThaiDongTien,
                                  MaBacDaoTao = b.MaBacDT,
                                  TenBacDaoTao = b.TenBacDT + " - " + b.TbHeDaoTao.TenHeDaoTao,
                                  HinhThucDK = p.HinhThucDK
                              }
                             ).AsEnumerable().Where(p => p.NgayDangKy.Date >= _TuNgay.Date && p.NgayDangKy.Date <= _DenNgay.Date);

                if (TrangThaiKichHoat == "2")
                    #region Thống kê đã đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == true);
                    #endregion

                else if (TrangThaiKichHoat == "3")
                    #region Thống kê chưa đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == false);
                    #endregion

                return PartialView("_DangKyThem", result.ToList());
            }
            else
                ModelState.AddModelError("Error", "Có lỗi.");

            return PartialView();
        }

        [HttpPost]
        public ActionResult HinhThucTuyenSinh(string TuNgay, string DenNgay, string TrangThaiKichHoat)
        {
            if (!CheckRole.IsRole("tk_htts", Session["Function"] as string[]))
                return Content("Bạn chưa <a href='/Admin/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (ModelState.IsValid)
            {
                ViewBag.TuNgay = TuNgay;
                ViewBag.DenNgay = DenNgay;
                DateTime _TuNgay = DateTime.ParseExact(TuNgay, "dd/MM/yyyy", null);
                DateTime _DenNgay = DateTime.ParseExact(DenNgay, "dd/MM/yyyy", null);
                ViewBag.HinhThucDK = from enumValue in Enum.GetValues(typeof(HinhThucDK)).Cast<HinhThucDK>()
                                     select new SelectListItem
                                     {
                                         Text = ((DisplayAttribute)(typeof(HinhThucDK).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false).First())).Name,
                                         Value = ((int)enumValue).ToString(),
                                     };
                var result = (from p in db.TbThiSinhs
                              join q in db.TbChuyenNganhs on p.MaChuyenNganh equals q.MaChuyenNganh
                              join a in db.TbThiSinh_BacDaoTaos on p.MaTS equals a.MaTS
                              join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT                       
                              join k in db.TbNganhs on q.IDNganh equals k.IDNganh
                              join l in db.TbKhoiThis on k.MaKhoiThi equals l.MaKhoiThi
                              where a.DKThem == false
                              select new ResultTK
                              {
                                  MaTS = p.MaTS,
                                  FullName = p.HoDem + " " + p.Ten,
                                  SBD = p.SBD,
                                  NgaySinh = p.NgaySinh,
                                  MaChuyenNganh = p.MaChuyenNganh,
                                  //MaHeDaoTao = h.MaHeDaoTao,
                                  MaKhoiThi = l.MaKhoiThi,
                                  TenKhoiThi = l.TenKhoiThi,
                                  MaNganh = k.MaNganh,
                                  TenChuyenNganh = q.TenChuyenNganh,
                                  TenNganh = k.TenNganh,
                                  //TenHeDaoTao = h.TenHeDaoTao,
                                  NgayDangKy = p.NgayDangKi,
                                  TrangThaiDongTien = p.TrangThaiDongTien,
                                  MaBacDaoTao = b.MaBacDT,
                                  TenBacDaoTao = b.TenBacDT + " - " + b.TbHeDaoTao.TenHeDaoTao,
                                  HinhThucDK = p.HinhThucDK
                              }
                             ).AsEnumerable().Where(p => p.NgayDangKy.Date >= _TuNgay.Date && p.NgayDangKy.Date <= _DenNgay.Date);

                if (TrangThaiKichHoat == "2")
                    #region Thống kê đã đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == true);
                    #endregion

                else if (TrangThaiKichHoat == "3")
                    #region Thống kê chưa đóng lệ phí
                    result = result.Where(p => p.TrangThaiDongTien == false);
                    #endregion

                return PartialView("_HinhThucDangKy", result.ToList());
            }
            else
                ModelState.AddModelError("Error", "Có lỗi.");

            return PartialView();
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}